<?php

/*
 * Table/EmployeDisponibiliteTable.php
 */
namespace RHX\Model\Table;

use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\ResultSet\ResultSet;
use RHX\Model\Object\EmployeDisponibilite;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Where;

class EmployeDisponibiliteTable extends AbstractTableGateway {

    protected $table = 'rh_employe_disponibilite';

    public function __construct(Adapter $adapter) {
	$this->adapter			 = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new EmployeDisponibilite());
	$this->initialize();
    }

    public function getAll() {
	return $this->select();
    }

    public function get($id) {
	$row = $this->select(array('id' => $id))
		->current();
	if (!$row)
	    throw new \Exception("Impossible de trouver #$id");

	return $row;
    }

    /**
     * Disponibilité de l'employé
     * 
     * @param type $matricule
     * @return EmployeDisponibilite
     * @throws \Exception
     */
    public function getDispoByEmploye($matricule) {
	$row = $this->select(function(Select $select) use($matricule) {
		    $select->order('version DESC');
			    $where = new Where();
		    $where->equalTo('matricule', $matricule);
		    $select->where($where);
			})->current();
	if (!$row)
	    throw new \Exception("Impossible de trouver la disponibilité pour le Matricule #$matricule<br>");

	return $row;
    }

    public function save(EmployeDisponibilite $dispo) {
	$data	 = array(
	    'matricule'		 => $dispo->matricule,
	    'version'		 => $dispo->version,
	    'lundi'			 => $dispo->lundi,
	    'lundi_entree'		 => $dispo->lundi_entree,
	    'lundi_sortie'		 => $dispo->lundi_sortie,
	    'mardi'			 => $dispo->mardi,
	    'mardi_entree'		 => $dispo->mardi_entree,
	    'mardi_sortie'		 => $dispo->mardi_sortie,
	    'mercredi'		 => $dispo->mercredi,
	    'mercredi_entree'	 => $dispo->mercredi_entree,
	    'mercredi_sortie'	 => $dispo->mercredi_sortie,
	    'jeudi'			 => $dispo->jeudi,
	    'jeudi_entree'		 => $dispo->jeudi_entree,
	    'jeudi_sortie'		 => $dispo->jeudi_sortie,
	    'vendredi'		 => $dispo->vendredi,
	    'vendredi_entree'	 => $dispo->vendredi_entree,
	    'vendredi_sortie'	 => $dispo->vendredi_sortie,
	    'samedi'		 => $dispo->samedi,
	    'samedi_entree'		 => $dispo->samedi_entree,
	    'samedi_sortie'		 => $dispo->samedi_sortie,
	    'dimanche'		 => $dispo->dimanche,
	    'dimanche_entree'	 => $dispo->dimanche_entree,
	    'dimanche_sortie'	 => $dispo->dimanche_sortie,
	);
	$id	 = (int) $dispo->id;
	if ($id == 0) {
	    $this->insert($data);

	    return $this->lastInsertValue;
	}
	elseif ($this->get($id)) {
	    $this->update($data, array('id' => $id));

	    return $id;
	}
	else {
	    throw new \Exception("Impossible de trouver #$id");
	}
    }

    public function erase($id) {
	return $this->delete(array('id' => $id));
    }

    public function executeQuery($sql) {
	return $this->adapter
			->query($sql)
			->execute();
    }

}

?>
